#include <stdio.h>



// int main()
// {
//     int i = 10;
//     int j = 20;
//     int k = 3;
//     k *= i + j;//结果为90,赋值运算符优先级较低，先计算+号
//     return 0;
// }





//输入两个正整数a和b，求a和b的最小公倍数
//辗转相除法可以求两个数的最大公约数，a*b/最大公约数即为最小公倍数

// //我自己的写法
// int main()
// {
//     int a = 0;
//     int b = 0;
//     scanf("%d %d",&a,&b);
//     int r = 0;
//     if(a < b)
//     {
//         int temp = a;
//         a = b;
//         b = temp;
//     }
//     int ret = a * b;
//     r = a % b;
//     while(b % r)
//     {
//         r = b % r;
//         b = r;
//     }
//     ret = ret / r;
//     printf("a和b的最小公倍数是%d\n",ret);
//     return 0;
// }


// //暴力求解
// int main()
// {
//     int a = 0;
//     int b = 0;
//     scanf("%d %d",&a,&b);
//     int m = (a > b ? a : b);
//     int n = m;
//     while(1)
//     {
//         if(m%a == 0 && m%b == 0)
//         {
//             break;
//         }
//         m+=n;//其实每次加m比每次加1更快
//     }
//     printf("a和b的最小公倍数是%d\n",m);
//     return 0;
// }





//字符串逆序问题 单词及标点符号内部不逆序，单词顺序逆序，例如
//i like beijing. -> beijing. like i
//解题思想 先全部逆序 再把每个单词内部逆序 
#include <string.h>
#include <assert.h>
void reverse(char* left,char*right)
{
    assert(left);
    assert(right);
    while(left < right)
    {
        char temp = *left;
        *left = *right;
        *right = temp;
        left ++;
        right --;
    }
}
int main()
{
    char arr[101] = {0};
    gets(arr);
    int len = strlen(arr);
    //1字符串整体逆序
    reverse(arr,arr+len-1);
    //2单词内部逆序
    char* start = arr;
    char* end = arr;
    // while(*end != '\0')
    // {
    //     end ++;
    //     if(*end == ' ')
    //     {
    //         reverse(start,end-1);
    //         end++;
    //         start = end;
    //     }
    // }
    // //这部分代码有个问题 那就是最后一个单词不是以空格结尾，无法逆序
    // //可在最后在执行一次reverse(start,end-1);
    // //或改成如下代码

    while(*start != '\0')
    {
        
        while(*end != ' ' && *end != '\0')
        {
            end ++;
        }
        reverse(start,end-1);
        if(*end != '\0')
            end++;//如果end指向的是空格而不是'\0'，就跳过空格到下一个单词继续循环
        //如果end指向了'\0'，就可以结束循环了
        start = end;
    }
    printf("%s",arr);
    return 0;
}
